A graph is often used to represent the behavior or structure of a complex system. For example, in the field of computer science, design engineers commonly use graphs to represent dependencies among components in complex software systems. Design engineers also use graphs to represent state machines associated with complex systems.
Commonly, a user will wish to display the graph in some form to gain insight regarding the relationships represented therein. In many cases, however, the amount of detail in the graph hinders a user's comprehension of the graph. To address this problem, users commonly resort to automated techniques for organizing the graph to make it easier to understand.
One commonly-used visualization technique is known as the Sugiyama algorithm. The Sugiyama algorithm operates by structuring the nodes of the graph in a hierarchy having multiple layers. The algorithm also arranges the positions of the nodes in the graph to improve visual comprehension. For instance, the Sugiyama algorithm can reduce the number of edge crossings in the graph. By virtue of these operations, the Sugiyama algorithm may produce a less cluttered visualization of the graph.
However, techniques like the Sugiyama algorithm are not fully satisfactory in all cases, especially for graphs that have a large amount of detail. That is, the output of the Sugiyama algorithm can sometimes produce visualizations that are perceived as aesthetically unappealing and confusing.